/*
https://www.luogu.com.cn/problem/P1451
求细胞数量本题DFS 和BFS 均可完成染色。我们采用BFS 来染色，vis 数组可以担当染色标记。
注意事项：
•若(𝑥,𝑦)是细胞且无色，则答案+1、并将其所属整个细胞染色
•BFS 的实现：当队列非空，访问队首，并将相邻结点入队
•避免重复访问
*/
#include <bits/stdc++.h>
using namespace std;
int n, m, ans;
char a[105][105];
bool vis[105][105];
struct Pos {
    int x, y;
    Pos(int ax = 0, int ay = 0) {
        x = ax; // 该结点的 x 值初始化为 ax
        y = ay; // 该结点的 y 值初始化为 ay
    }
};
// 从 (x, y) 开始 BFS 整个细胞
void bfs(int x, int y) {
    queue<Pos> q;
    q.push(Pos(x, y)); // 将 (x,y) 入队
    while(!q.empty()) { // 当队列非空
        Pos now = q.front(); // 现在处理队首结点
        q.pop(); // 队首出队
        int x = now.x, y = now.y;
        if(x < 1 || x > n) continue;
        if(y < 1 || y > m) continue;
        if(a[x][y] == '0') continue;    // 不是细胞点
        if(vis[x][y]) continue;       // 如果这个点被访问过则跳过
        vis[x][y] = true;       // 用 vis 数组避免重复访问
        q.push(Pos(x - 1, y)); // 将上方结点加入到队列
        q.push(Pos(x + 1, y)); // 将下方结点加入到队列
        q.push(Pos(x, y - 1)); // 将左方结点加入到队列
        q.push(Pos(x, y + 1)); // 将右方结点加入到队列
    }
}
int main() {
    cin >> n >> m;
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= m; j++)
            cin >> a[i][j];
    for(int x = 1; x <= n; x++)
        for(int y = 1; y <= m; y++)
            if(a[x][y] >= '1' && !vis[x][y]) { // (x,y) 这个点是细胞点，且未访问过
                ans++;
                bfs(x, y); // 开始对 (x,y) 这个点进行 BFS
            }
    cout << ans << endl;
    return 0;
}

/*
g++ bfs/bfs_2.cpp && echo "4 10
0234500067
1034560500
2045600671
0000000089" | ./a.out

样例输出
4
*/